package k2_oop.p1_classAndObject.demo02;

public class Calculator {

    /**
     * 做两个数组的相加
     * @param x 第一个加数
     * @param y 第二个加数
     * @return  两个加数之和
     */
    public int plus(int x,int y){
        int result = x+y;
        return result;
    }

    /**
     * 重载方法
     *     在一个文件(类)中，方法名相同而参数不同的方法，叫做重载方法
     * 参数不同：宗旨就是能区分出调用不同的方法即可
     *     1.数量不同
     *     2.类型不同
     *     3.顺序不同(多个参数的类型不同)
     * @param x
     * @param y
     * @param z
     * @return
     */
    public int plus(int x,int y,int z){
        int result = x+y+z;
        return result;
    }

    /**
     * 不定长参数
     *     参数类型... 形参名
     *     参数可以没有，也可以是任意多个
     *     不定长参数的本质就是数组
     * @param nums
     * @return
     */
    public int plus(int... nums){
        int sum = 0;
        for (int num : nums) {
            sum+=num;
        }
        return sum;
    }

    /**
     * 两个数字相减
     * @param x
     * @param y
     * @return
     */
    public int minus(int x,int y){
        return  x-y;
    }

    /**
     * 做任意多个数字相乘
     * @param nums
     * @return
     */
    public int multiply(int... nums){
        int product = 1;
        for (int num : nums) {
            product*=num;
        }
        return product;
    }

    /**
     * 做两个数字相除
     * @param x
     * @param y
     * @return
     */
    public int divide(int x,int y){
        return x/y;
    }

    /**
     * 平方
     * @param a
     * @return
     */
    public int square(int a){
        return power(a,2);
    }

    /**
     * 幂运算
     * @param a
     * @param index
     * @return
     */
    public int power(int a,int index){

        int product = 1;
        for (int i = 0; i < index; i++) {
            product*=a;
        }
        return product;
    }
}
